;(function($) {
    DT.Page = function(options) {
        var _this = this;

        this.defaults = {
            container    : null,            // 承载页面的容器
            desktop      : null,            // 桌面对象
            taskbar      : null,            // 任务栏对象，主要用来关联操作
            title        : '',
            code         : 1,
            showPageCode : false,
            current      : false,
            shortcuts    : [],
            widgest      : [],
            info         : [],
            marginLeft   : 0
        };

        this.handler = {
            page      : null,
            code      : null
        };

        /**
         * 初始化配置参数
         * @param {Object} [o] 用于初始化的参数列表
         **/
        this._ini = function(o) {
            options = $.extend( _this.defaults, o, {
                // 根据页码计算页面在桌面中的位置
                marginLeft : o.desktop.width() * (o.code - 1)
            });

            return this;
        };

        // 创建页面
        this._createPage = function() {
            var handler = _this.handler;

            handler.page = $('<div></div>').addClass('dt-desktop-page')
                .appendTo(options.container)
                .css({ marginLeft : options.marginLeft});

            // 无论是否现实页码都要创建。
            this.setPageCode(options.code);

            return this;
        };

        /**
         * 创建页码，默认显示在左上方
         * @param {Number} code 现实的页码
         */
        this._createPageCode = function(code /* Number */) {
            var handler = _this.handler;

            handler.code = $('<div></div>').addClass('dt-desktop-page-code')
                .appendTo(options.container)
                .css({
                    display    : 'none',                 // 默认不显示页码
                    marginLeft : options.marginLeft
                })
                .html(code);

            options.current && handler.code.addClass('dt-desktop-page-code-current');

            return this;
        };

        /**
         * 创建当前页面中的快捷方式
         * @param {Object} shortcutInfo 快捷方式信息
         */
        this._createShortcut = function(shortcutInfo /* Object */) {
            var handler = _this.handler;

            shortcutInfo.ele = new DT.Shortcut($.extend(shortcutInfo, {
                desktop : options.desktop,
                page    : handler.page,
                //guid    : guid,             // 不能从这里创建GUID。这样会导致执行多次shortcut事件错误。
                taskbar : options.taskbar
            })).render();

            // 将Desktop/Page/Shortcut对象添加到moduleManager中。
            //DT.moduleManager.setHandler(guid, 'desktop', options.desktop);
            //DT.moduleManager.setHandler(guid, 'taskbar', options.taskbar);
            //DT.moduleManager.setHandler(guid, 'page', handler.page);
            //DT.moduleManager.setHandler(guid, 'shortcut', shortcutInfo.ele);

            return this;
        };

        // 更新当前页面中的快捷方式的排列
        this._updateShortcutsPosition = function() {
            var x  = 0,
                y  = 0,
                i  = 0,
                ph = _this.handler.page.height();
            
            $.each(
                _this.defaults.shortcuts.sort(function(a, b) { return a.index - b.index; }),
                function(index, item) {
                    var s = item.ele.getHandler(),
                        w = s.width(),
                        h = s.height();
                    
                    // 除第一个快捷方式之外，其他的快捷方式都要在原来的基础加增加10px
                    // 用来增大快捷方式垂直间的距离
                    y += h - (!i++ ? h : -10);
                
                    // 仅对y进行边界判断，即垂直
                    if (y + h >= ph) {
                        x += w;
                        y = 0;
                    }

                    s.css({ left : x, top : y });
                }
            );

            return this;
        };

        this._ini(options);
    };

    DT.Page.prototype = {
        // 渲染页面
        render : function() {
            var _this = this;

            this._createPage();

            // 创建当前页面中包含的所有快捷方式
            $.each(this.defaults.shortcuts, function(index, item) {
                // 若未设置index，则默认为100
                item.index = $.type(item.index) == 'number' ? item.index : 100;
                _this._createShortcut(item);
            })

            this._updateShortcutsPosition();

            return this;
        },

        // 获取页面句柄
        getHandler : function() {
            return this.handler.page;
        },

        /**
         * 设置页码，将会显示在左上角
         * @param {Number} code 要设置的页码
         */
        setPageCode : function(code /* Nubmer */) {
            code = code || 1;
            this.defaults.code = code;
            this._createPageCode(code);

            this.defaults.showPageCode && this.showPageCode();

            return this;
        },

        // 在当前页面中显示页码
        showPageCode : function() {
            this.handler.code.show();
            return this;
        },

        // 翻页，即滚动桌面到当前页
        paging : function() {
            this.defaults.container.animate({
                marginLeft : this.defaults.marginLeft * -1
            })
        },

        // 更新当前页面中的快捷方式的排列
        updateShortcutsPosition : function() {
            this._updateShortcutsPosition();
            return this;
        }
    };
    DT.Page.constructor = DT.Page;
})(jQuery);